Windows NTのOSローダーによる
マルチOSブートの試み

最終更新 1999.4.30


目次

  1. はじめに
  2. Windows NTとWindows 95のブートについて
  3. マルチOSブートの実現
  4. OSローダーのみのインストール
  5. その他
  6. おわりに

表目次

  1. Windows NTのブート関連ファイル
  2. Windows 95と旧版MS-DOSのファイル名の対応
  3. パーティション構成例
  4. PBRイメージファイル名の例
  5. OS/2のインストール形態と、 NTのOSローダーからのブート可能性との関係

1. はじめに

本稿では、Windows NTのOSローダーを用いて、複数のOSを選択ブートする方法について解説します。対象機種はPC/AT互換機で、 OSはMS-DOS、Windows 95、Windows NT、FreeBSD、Linuxです。

本稿の内容は、参考文献に示したWWWページの内容に基づいています。そちらもあわせて熟読されることをおすすめします。

なお、本稿の内容を運用した結果について筆者は責任を負いません。手順を誤ると、OSがブートしなくなったり、パーティションがアクセス不能になったりするおそれがあります。十分に内容を理解した上で慎重に作業を行ってください。


2. Windows NTとWindows 95のブートについて

ここでは、本題に入る前の予備知識として、 AT互換機の起動処理、Windows NT/95のブート処理について簡単に解説します。すでに知っている方は読み飛ばしてください。

2.1 PC/AT互換機の起動処理

POST終了後、BIOSは1台目のHDDのマスターブートレコード(MBR)を読み出し、処理を移します。 MBRはパーティションテーブルを保持しており、アクティブな基本パーティションのパーティションブートレコード(PBR)を読み出し、処理を移します。 PBRはOSをブートします。 MBRは特定のOSには依存しませんが、PBRはOSやファイルシステムに依存します。

このように、標準のブート処理はきわめて限定されたものであり、 PC-98のように起動時にOSを選択することなどはできません。そのため、さまざまなブートセレクターが出回っています。

2.2 Windows NTのブート処理

NTは、PBRから起動される独自のブートセレクターを持っています。これは、NTのブートに密接に関係していますが、他のOS(のPBR)をブートすることもできます。

NTをインストールすると、 1台目のHDDのアクティブな基本パーティション(ドライブC:)のPBRに、 NTのPBRが書き込まれます。 C:にすでに他のOS(通常はDOS/Win95)がある場合、古いPBRはBOOTSECT.DOSとして保存されます。

このパーティションを起動すると、 NTのPBRは、NTLDRをロードして処理を移します。 NTLDRは、BOOT.INIを読み込んでOSローダー画面を表示し、ブートするOSをユーザーに選択させます。ここで、NTが選択されると、 NTDETECT.COMを呼び出してハードウェアの構成を調査させ、カーネル(NTOSKRNL.EXEまたはNTMPKRNL.EXE)をロードしてNTをブートします。 NT以外のOSが選択されると、 BOOT.INIで指定したPBRイメージファイル(デフォルトはBOOTSECT.DOS)を読み込み、処理を移します。これにより、MBRから直接そのPBRが呼ばれたのと同じ状況になるため、目的のOSをブートすることができます。

Windows NTのブート関連ファイル
ファイル名 内容
NTLDR OSローダー本体
NTDETECT.COM ハードウェアの構成を調査する
BOOT.INI OSローダーの設定
BOOTFONT.BIN 日本語フォント
BOOTSECT.DOS 元のPBR
NTBOOTDD.SYS SCSIドライバ

BOOT.INIがないと、デフォルトのパス

multi(0)disk(0)rdisk(0)partition(1)\WINNT

からNTをブートします。 BOOTFONT.BINがないと、OSローダーは英語モードで動作します。 NTBOOTDD.SYSは、BIOSを持たないSCSIカードに接続されたHDDからのブートに使われます (実体は、そのSCSIカードのNT用デバイスドライバそのものらしいです)。

2.3 Windows 95のブート処理

DOSがインストールされているパーティションにWindows 95をインストールした場合、 95とDOSの選択ブートが可能になります。これは、両方のシステムファイル(IO.SYSMSDOS.SYSなど)を保持しておき、ブート時に起動メニューなどの選択によってリネームして入れかえることで実現されています。

Windows 95と旧版MS-DOSのファイル名の対応
ファイル名 DOS版 Win95版
IO.SYS IO.DOS WINBOOT.SYS
MSDOS.SYS MSDOS.DOS MSDOS.W40
COMMAND.COM COMMAND.DOS COMMAND.W40
CONFIG.SYS CONFIG.DOS CONFIG.W40
AUTOEXEC.BAT AUTOEXEC.DOS AUTOEXEC.W40

なお、PC DOSではIO.SYSMSDOS.SYSのかわりに IBMBIO.COMIBMDOS.COMというファイル名になっています。ここに95をインストールすると、空のIO.DOSMSDOS.DOSが作られてしまい、起動メニューからPC DOSをブートできなくなることがあります。その場合は、これらのファイルを消してください。


3. マルチOSブートの実現

3.1 前提

対象とするOSは以下の通りです。

ここでは、1台のEIDE HDDにすべてインストールする以下のような構成を想定します。

パーティション構成例
パーティション OS ファイルシステム ドライブ名 ARCパーティション番号 FreeBSDデバイス名 Linuxデバイス名
基本 PC DOS、Windows 95 VFAT16 C: 1 wd0s1 hda1
基本 FreeBSD UFS -- 2 wd0s2 hda2
拡張 Windows NT VFAT16/NTFS D: 3 wd0s5 hda5
Linux swap -- 4 wd0s6 hda6
ext2 -- 5 wd0s7 hda7

DOSとWindows 95は同一の基本パーティションに、 NTとFreeBSDとLinuxはそれぞれ独立のパーティションにインストールするものとします。NTとLinuxは拡張パーティションにインストールできますので、基本パーティションを節約するためにそうしています。

なお、LinuxにUFSサポートを組み込んだ場合、 FreeBSDのパーティション(スライス)中にある各UFSパーティションが/dev/hda5以降に割り当てられますので、 Linuxのパーティションのデバイス名が変化します。

3.2 作業の概要

  1. 各OSのPBRをHDDから読み取り、イメージファイルを作成します。
  2. BOOT.INIを設定します。

3.3 PBRのイメージファイルの作成

OSローダーでNT以外のOSをブートするためには、そのOSのPBRのイメージファイルを作る必要があります。ファイル名はなんでもかまいませんが、ここでは筆者の趣味(※)で以下のようにします。 BOOTSECT.DOSというファイル名のファイルを用意する必要はありません。

PBRイメージファイル名の例
OS ファイル名
PC DOS PCDOS.PBR
Windows 95 WIN95.PBR
FreeBSD FREEBSD.PBR
Linux LINUX.PBR

ファイルを置いておくディレクトリもどこでもよいのですが、ここではC:\に置くことにします。

他の文献ではBOOTSECT.DOSに倣ってBOOTSECT.W95とかBOOTSECT.LNXなどとしていますが、拡張子はファイルの形式を表すものであるという原則に立てば、このようなネーミングは不適切といえます。

それでは、各OSのPBRのイメージファイルを作る方法を説明します。作業の前に、インストールした各OSが通常の手順で正しくブートすることを確認してください。また、非常時に備えて、各OSのインストール(ブート)メディアと緊急用ブートフロッピーを必ず用意しておきましょう。

まっさらなHDDに新規にインストールする場合は、以下の順序をお勧めします。

  1. DOSをインストールする。
  2. DOSのPBRを保存する。
  3. Win95をインストールする。
  4. 基本パーティションに他のOS(ここではFreeBSD)をインストールする。
  5. NTをインストールする。
  6. 拡張パーティションに他のOS(ここではLinux)をインストールする。
  7. BOOT.INIを編集する(後述)。

3.4 BOOT.INIの設定

NTをインストールした後のBOOT.INIは、次のようになっていることと思います。

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(3)\WINNT

[operating systems]
multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00"
multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 [VGA mode]" /basevideo /sos
C:\="Microsoft Windows"

[operating systems]セクションには、ブートするOSの名称とその所在を記述します。所在は、NTの場合はSystemRootディレクトリをARCパス名で記述し、他のOSの場合はPBRのイメージファイルをフルパスで記述します (ファイル名を省略するとBOOTSECT.DOSとみなされます)。

[boot loader]セクションについてはとくに説明の必要はないでしょう。なお、timeoutに-1を指定するとタイムアウトが無効になります。

以上から、マルチOSブートを実現するためには、 PBRイメージファイル(*.PBR)をC:\におき、 BOOT.INIを以下のように記述します。

[boot loader]
timeout=30
default=C:\PCDOS.PBR

[Operating Systems]
multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT"
multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT [VGA mode]" /basevideo /sos
C:\PCDOS.PBR="PC DOS/V" /win95dos
C:\WIN95.PBR="Windows 95" /win95
C:\FREEBSD.PBR="FreeBSD"
C:\LINUX.PBR="Linux"

ここで、DOSのエントリについている/win95dosスイッチと、 95のエントリについている/win95スイッチが重要です。これらは、OSローダーの非公式な機能で、 95の起動メニューと同様にシステムファイルのリネームを行います。この機能はNT 3.51以降のOSローダーで有効です。

なお、ここではタイムアウト時にPC DOSをブートするように指定していますが、もちろん他のOSを指定してもかまいません。

MBRに何らかのブートセレクター(lilo、booteasyなど)が入っている場合は、わずらわしくないよう、外しておきます。 DOSでFDISK /MBRとするのが簡単です。


4. OSローダーのみのインストール

ここでは、NTをインストールせずにOSローダーのみをインストールする方法を説明します。前提とする構成は、前章の構成からNTを除いたものとします。

以下のような手順を踏みます。

  1. 各OSのPBRをイメージファイル化する
  2. OSローダーのファイルをコピーする
  3. BOOT.INIを書く
  4. C:にNTのPBRを書く

4.1 PBRのイメージファイルの作成

ここは前と同じですので省略します。ただし、NTのインストーラーがBOOTSECT.DOSを作ってくれるということはありませんので、 DOS/Win95のDEBUGコマンドやUNIXのddコマンドですべて作る必要があります。

4.2 OSローダーのファイルのコピー

NTのCD-ROMから、NTLDRBOOTFONT.BINC:\にコピーします。 NTをブートするわけではないのでNTDETECT.COMは不要です。また、英語表示でかまわなければBOOTFONT.BINも不要です。

4.3 BOOT.INIの作成

エディタを使ってBOOT.INIを書きます。ここでは以下のようにします。

[boot loader]
timeout=30
default=C:\PCDOS.PBR

[Operating Systems]
C:\PCDOS.PBR="PC DOS/V" /win95dos
C:\WIN95.PBR="Windows 95" /win95
C:\FREEBSD.PBR="FreeBSD"
C:\LINUX.PBR="Linux"

4.4 PBRの更新

C:のPBRを、NTのもので置き換えます。 NTの修復インストールで「ブートセクタの検査」を選べばよいように思いますが、実際にやってみると、修復ディスクがあるかNTをインストールしてあることを要求されるので、うまくいきません。ここでは、NTのセットアップディスクからブートレコードを読み出し、PBRとして利用します。ただし、これはNTLDRの代わりにSETUPLDR.BINを読むようになっているので、そこを書き換える必要があります。また、PBRにはBPB(BIOS Parameter Block)が記録されているので、元のC:のBPBを壊さないようコピーします。手順を誤ると非常に危険ですので注意してください。

C:\>DEBUG
-L 100 0 0 1		ドライブA:のブートレコードを0100H番地に読み込む
-E 2DC "NTLDR      "	読み出すファイル名をNTLDRに書き換える
-L 1000 2 0 1		ドライブC:のPBRを1000H番地に読み込む
-M 100B 103D 10B	BPBをコピーする
-W 100 2 0 1		ドライブC:のPBRに書き出す
-Q

C:\>

Wコマンドで書き出す前に、Dコマンドで確認することを強くお勧めします。また、この書き換えたPBRもファイル化しておくとよいでしょう。

最後にFDISKでC:をアクティブに設定し、リブートしてOSローダーから各OSが起動できれば成功です。


5. その他


6. おわりに

AT互換機では、標準のブート処理が貧弱であり、複数のOSを選択ブートするのには向いていません。また、パーティション管理の制約と複雑さもこれに輪をかけています。

この欠点を補うべく、多くのブートセレクターが出回っていますが、

といった問題を常に抱えています。

NTのOSローダーは、ファイル化したPBRを選択実行するという方法により、原理的には多くのOSをブートすることが可能です。 PBRのイメージファイルを用意するのがやや面倒ではあるものの、設定の変更はテキストファイルを編集することで容易に行え、選択ブートの操作性も優れています。

本稿では、このような特長を生かした選択ブートの実現について説明しました。皆さんのOS環境改善の一助となれば幸いです。本稿に対するご意見や改良案、誤りの指摘を歓迎します。


付録A. DEBUGコマンドによるPBRの読み書きの例

DOSや95に付属しているDEBUGコマンドを用いて PBRを読み書きする例を示します。

PBRを読み込んでイメージファイルを書き出す

C:\>DEBUG
-L 100 2 0 1		ドライブC:のPBRを0100H番地に読み込む
-N NT40.PBR		書き出すファイル名を指定
-R BX			書き出すサイズを指定
BX 0000
:0
-R CX
CX 0000
:200
-W			0100H番地以降を書き出す
Writing 0200 bytes
-Q

C:\>

イメージファイルを読み込んでPBRに書き出す

PBRへの書き出しはとくに注意してください。手順を誤るとOSがブートしなくなるおそれがあります。

C:\>DEBUG NT40.PBR	ファイルを0100H番地に読み込む
-W 100 2 0 1		ドライブC:のPBRに書き出す
-Q

C:\>

付録B. OS/2のブートについて

OS/2は、ブート方法やインストール先パーティションによって、いくつかのインストール形態がありますが、ほとんどの場合、NTのOSローダーからの直接ブートには困難を伴います。

OS/2のインストール形態と、 NTのOSローダーからのブート可能性との関係
インストール形態 ブート可能性 備考
ブート方法 パーティション ファイルシステム
2重ブート 基本(アクティブ) FAT BOOTコマンドで切り替えるとPBRの入れ替えが起きるため、再度切り替えるまではOSローダーが起動しなくなります。これを克服しても、 OSローダーではCONFIG.SYSAUTOEXEC.BATを入れ替えられないため、ブートできるのはDOSとOS/2のうち有効になっている方だけです。
ブートマネージャー
または単独
基本(アクティブ) FAT C:にDOSを入れることはできません。
HPFS C:がHPFSになるので、 OSローダーを導入する環境としては現実的ではありません。
基本(非アクティブ) FAT × ブートしそうに見えますが、ブートマネージャーの場合と違い、このパーティションがC:にならないので、 OS/2はファイルを見つけられず、ブートできません。
HPFS
ブートマネージャー 拡張 FAT × まったくブートしません。
HPFS

結局、OS/2に関しては、NTのOSローダーからの直接ブートはあきらめて、他のブートセレクター(OS/2ブートマネージャーかMBR型のブートセレクター)を併用することになるでしょう。

OS/2ブートマネージャーを使う場合、OS/2を1つしかブートしないのであれば、ブートマネージャーのタイムアウトを短くすることで、見かけ上OSローダーから直接ブートすることができます。ただし、OS/2ブートマネージャーは、基本パーティションを1つ占有するという欠点があります。また、ブートマネージャーのパーティションはファイルシステムではないため、そのPBRをファイル化するには、ディスクBIOSを呼ぶか、UNIXでddを使うか、 BootPartのような専用ツールを使う必要があります。

MBR型ブートセレクターを使う場合は、OSローダーとあわせて2段階の選択操作が必須です。


参考文献

How to Triple Boot to Windows NT, Windows 95, and MS-DOS
DIRECT BOOT INTO WinNT/Win95/DOS

NTのOSローダーを用いてNT/95/DOSを選択ブートする方法について述べています。本稿の基本的アイデアです。

NT OS Loader + Linux mini-HOWTO/(邦訳)

LinuxのHOWTO文書です。NTのOSローダーを用いてLinuxをブートする方法について述べています。

どのようにしたら FreeBSD を NT ローダーからブートさせることができますか?

FreeBSDのFAQ集の一節で、NTのOSローダーを用いたNTとFreeBSDのマルチブートについて述べています。

The NTLDR Hacking Guide

本稿と同じような内容の文書です。併せて読むと理解が深まるでしょう。 PBRの読み書きを行うツールもあります。

BootPart 2.0: Boot Partition for WinNT

PBRの読み書きを手軽に行うツールです。

Windows NTトレーニングキット、アスキー出版局

MCP試験向けの自習書です。NTのブートの仕組みについて比較的詳しい解説が載っています。

FreeBSD & the Windows NT Boot Loader

NTのOSローダーに関連して、2台目のHDDにインストールしたFreeBSDをブートする方法について述べています。

Windows95 OSR2 FAQ

OSR2の起動メニューではDOSを起動することができません。これを解決する方法を紹介しています。

複数のOSを走らせる法(フレーム版)

AT互換機で複数のOSを動かす方法について、さまざまな角度から考察しています。


用語集

マスターブートレコード(MBR)

各物理HDD(とくに1台目のHDD)の先頭セクタのこと。パーティションテーブルや、アクティブパーティションのPBRを読み出して実行を移すコードが含まれている。

パーティションブートレコード(PBR)

各パーティション(拡張パーティションでは各論理ドライブ)の先頭セクタのこと。そのパーティションのファイルシステムの諸元や、 OSをブートするコードが含まれている。用語としては必ずしも定着しているものではない。

ブートセレクター

本稿では、複数のOSを選択ブートするプログラムをまとめてこう呼んでいる。

実現の形態から見ると、多い順に以下のようにわけられる。

また、提供形態としては、OSに付属するもの、フリーソフト・シェアウェアとして配布されているもの、単独で市販されているもの(SystemCommander)、などがある。

ARC

ARC(Advanced RISC Computing)仕様とは、今は亡きACE(Advanced Computing Environment)コンソーシアム(Compaq、MS、MIPS、DEC、SCO他)が数年前に策定したMIPS R4000ベースのワークステーションの仕様。 BOOT.INIでパーティションを指定する場合には、以下のようにARCの規約にしたがって表記(※)することになっている。

なんでそんなのを採用したかというと、下記のBYTEの記事でもわかるように、 NTがOS/2 3.0と呼ばれていたころ、これをIntel x86だけでなくARC仕様機でも動かす予定だったからでしょう。その後NT 3.1としてデビューしたこのOSは、 x86とMIPSに加えてAlphaとPowerPCでも動くようになったわけですが、マルチプラットフォーム化の先鞭となったMIPS版は、PowerPC版ともども、 NT 4.0を最後に消えてしまいました。

ARCに関する参考資料:

2重ブート

OS/2が提供する選択ブートの方法の一つ。 C:にDOSとOS/2を両方インストールし、 BOOTコマンドによって両者を切り替えてブートする (BOOT /DOSまたはBOOT /OS2)。主に、DOSベースのシステムにOS/2を追加インストールするための方法である。

ブートするOSの切り替えは、PBRとCONFIG.SYSAUTOEXEC.BATを入れ替えることで実現されている。入れ替えによって退避されたPBRとファイルは、 C:\OS2\SYSTEM*.DOSまたは*.OS2として(一方だけ)保存される。

楽天モバイル[UNLIMITが今なら1円] ECナビでポインと Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!


無料ホームページ 無料のクレジットカード 海外格安航空券 解約手数料0円【あしたでんき】 海外旅行保険が無料! 海外ホテル